触发器
说明
在指定表上,(insert(插入)、update(跟新)、delete(删除))事件动作,触发(After(之后)时机,Before(之前)),执行指定的一群或一个sql语句。
Trigger语法
1 | DELIMITER $$ |
trigger_time 触发器执行时间 可选值 AFTER,Before
trigger_event 激活触发器动作 可选值 update,insert,delete
trigger_body 触发器激活执行的动作 由Begin…End包裹
New 与OLD关键字
在触发器主题中,可以使用New和Old访问受触发器影响的数据
- 忽略大小写
- 在insert触发器中只有New可用
- 在update触发器中New,Old都可使用
- 在delete触发器中只有Old可用
- old.column只能查看,不能修改,但是new可以更改,这意味着在before的触发器中你可以使用set New.column=value,比如在before update使用,你可以修改要更新的值,这样的set语句在AFTER触发器不起作用,因为行已经发生改变
示例:1
2
3
4
5
6
7
8
9
10CREATE TRIGGER `emp_details_BINS`
BEFORE INSERT
ON emp_details FOR EACH ROW
-- Edit trigger body code below this line. Do not edit lines above this one
BEGIN
SET NEW.FIRST_NAME = TRIM(NEW.FIRST_NAME);
SET NEW.LAST_NAME = TRIM(NEW.LAST_NAME);
SET NEW.JOB_ID = UPPER(NEW.JOB_ID);END;
$$
//在更新时去掉空格
完整示例
每个科目分数全部或的,现在我们将更新表格的总分数,总分数和分数平均分,
- PER_MARKS>90等级为EXCELLENT,
- PER_MARKS>=75 AND PER_MARKS<90 为’VERY GOOD’,
- PER_MARKS>=60 AND PER_MARKS<75 -=""> ‘GOOD’75>
- PER_MARKS>=40 AND PER_MARKS<60 -=""> ‘AVERAGE’60>
- PER_MARKS<40-> ‘NOT PROMOTED’40->
STUDENT_ID | NAME | SUB1 | SUB2 | SUB3 | SUB4 | SUB5 | TOTAL | PER_MARKS | GRADE |
---|---|---|---|---|---|---|---|---|---|
1 | Steven King | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 |
1 | DELIMITER |
视图
描述
视图是基于SQL SELECT query和JOIN的。视图和表很相似,它也包含行和列,所以可以直接对它进行查询操作
创建视图语法
1 | CREATE |
CREATE VIEW 创建新的视图
view_name 视图名称
select_statement 基于SELETE提供视图的定义,select_statement可以从表或其他的视图获取
OR REPLACE 可选,如果视图存在则覆盖,如果不存在则新建
创建视图示例
1 | CREATE VIEW view_bookmast AS |
修改视图
修改视图语法与创建视图类似1
2
3
4
5
6
7
8ALTER
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
删除视图
语法1
2
3DROP VIEW [IF EXISTS]
view_name [, view_name] ...
[RESTRICT | CASCADE]